맨위로가기

일급 함수

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

일급 함수는 함수형 프로그래밍 언어에서 핵심적인 개념으로, 함수를 다른 함수의 인자로 전달하거나 함수의 결과로 반환하는 것을 의미한다. 이러한 특징은 고차 함수, 익명 함수, 클로저 등을 가능하게 한다. 함수형 언어인 Haskell, Lisp, ML 등과 스크립트 언어인 JavaScript, Python 등은 일급 함수를 지원한다. C, C++, Pascal과 같은 명령형 언어는 함수 포인터를 통해 고차 함수를 흉내낼 수 있지만, 일급 함수로 간주하지는 않는다. C++11은 익명 함수와 클로저를 지원하며, 타입 이론과 범주론적 프로그래밍에서도 일급 함수의 개념이 활용된다.

더 읽어볼만한 페이지

  • 프로그래밍 언어 이론 - 튜링 완전
    튜링 완전은 계산 이론에서 시스템이 튜링 기계와 동등한 계산 능력을 갖춰 튜링 기계가 계산할 수 있는 모든 함수를 계산하고 범용 튜링 기계를 시뮬레이션할 수 있음을 의미하며, 튜링 동등이라고도 한다.
  • 프로그래밍 언어 이론 - 부작용 (컴퓨터 과학)
    함수의 반환값 외에 프로그램 상태를 변경시키는 부작용은 참조 투명성을 해치고 버그 발생 가능성을 높이며 최적화와 느긋한 계산법에 부정적 영향을 미치는 반면, 멱등성은 부작용이 있는 서브루틴을 여러 번 적용해도 시스템 상태에 단일 적용과 동일한 영향을 미치는 속성이다.
  • 원시 자료형 - 참조
    참조는 프로그래밍에서 메모리 주소나 다른 데이터를 가리키는 값으로, 데이터의 효율적인 전달과 공유를 위해 사용되며, 포인터, 파일 핸들, URL 등이 그 예시이다.
  • 원시 자료형 - 문자열
    문자열은 사람이 읽을 수 있는 텍스트를 저장하고 정보를 전달하거나 받는 데 사용되는 순서가 있는 문자들의 시퀀스로, 다양한 형태의 데이터를 표현하며 유한한 길이를 가지고, 프로그래밍 언어에서 기본 또는 복합 자료형으로 제공되고, 문자 집합과 인코딩 방식에 따라 표현 방식이 달라진다.
  • 함수형 프로그래밍 - 패턴 매칭
    패턴 매칭은 데이터 구조나 문자열에서 특정 패턴을 찾아 식별하는 기법으로, 다양한 프로그래밍 언어와 시스템에서 사용되며 데이터 필터링, 추출 및 선언적 프로그래밍에 중요한 역할을 수행한다.
  • 함수형 프로그래밍 - 익명 함수
    익명 함수는 이름이 없는 함수로, 람다 추상, 람다 함수, 람다 표현식, 화살표 함수 등으로 불리며, 함수형 프로그래밍 언어에서 람다식 형태로 많이 사용되고 고차 함수의 인수, 클로저, 커링 등에 활용되지만, 재귀 호출의 어려움이나 기능 제한과 같은 단점도 존재한다.
일급 함수
개요
유형프로그래밍 언어 기능
정의모든 엔터티가 변수에 할당되거나, 데이터 구조에 저장되거나, 다른 함수에 인수로 전달될 수 있는 경우 '일급' 상태를 갖는다.
일급 함수는 다른 함수에 인수로 전달될 수 있고, 다른 함수의 값으로 반환될 수 있으며, 변수에 할당될 수 있다.
특징
설명함수형 프로그래밍 언어에서 흔히 볼 수 있는 기능이다.
일급 함수를 지원하는 언어에서는 함수를 다른 데이터 형식과 마찬가지로 취급할 수 있다.
장점코드 재사용성 향상
유연성 증가
추상화 수준 향상
활용콜백 함수
고차 함수
클로저
구현
지원 언어C++ (일부 제한)
C#
클로저
커먼 리스프
다트
델파이
이클립스
얼랭
F#
자바
자바스크립트
루아

니므
오브젝티브-C
파스칼
PHP
파이썬
R
루비
스칼라
스킴
스몰토크
스위프트
Tcl

2. 개념

하스켈, Lisp, ML, Scheme과 같은 함수형 언어는 일급 함수를 전면적으로 지원한다. 그 외에 일급 함수를 지원하는 프로그래밍 언어로는 ECMAScript (ActionScript, JavaScript), Io, Lua, Nemerle, Perl, PHP, Python, Ruby, Scala, Tcl 등이 있다.

C 언어나 C++, Pascal 등의 프로그래밍 언어는 함수 포인터를 지원하며, 데이터 구조에 포함시키거나 다른 함수에 인수로 전달할 수 있다. 그러나 함수 포인터로 일급 함수를 지원한다고 간주되지는 않는다. C++는 `operator()`를 포함하는 사용자 정의 연산자를 지원하며, `operator()`를 가진 클래스는 함수 객체로 취급할 수 있다. 함수 객체는 C++에서 다른 일급 객체와 마찬가지로 조작할 수 있다. 또한, C++11에서는 익명 함수가 지원된다.

2. 1. 고차 함수: 함수를 인수로 전달

함수가 일급 시민인 언어에서는 함수를 다른 함수의 인수로 전달할 수 있다. 이러한 함수를 고차 함수라고 한다. 함수가 일급 시민이 아닌 언어에서도 함수 포인터나 델리게이트와 같은 기능을 사용하여 고차 함수를 작성할 수 있지만, 몇 가지 차이점이 있다.

Haskell 언어 예시는 리스트에서 작동하는 반면, C 언어 예제는 배열에서 작동한다. 둘 다 해당 언어에서 가장 자연스러운 복합 데이터 구조이며 C 예제가 연결된 목록에서 작동하도록 만들면 불필요하게 복잡해진다. 이는 또한 C 함수에 추가 매개변수가 필요한 이유(배열의 크기를 제공)를 설명한다. C 함수는 배열을 제자리에서 업데이트하며 값을 반환하지 않는 반면, Haskell에서는 데이터 구조가 불변 데이터 구조이다(기존 리스트는 그대로 유지되면서 새 리스트가 반환된다). Haskell 예제는 재귀를 사용하여 리스트를 순회하는 반면, C 예제는 반복을 사용한다. 이것은 두 언어 모두에서 이 함수를 표현하는 가장 자연스러운 방법이지만 Haskell 예제는 접기를 사용하여 쉽게 표현할 수 있으며 C 예제는 재귀를 사용하여 표현할 수 있다. 마지막으로 Haskell 함수는 다형적 형식을 가지며, 이는 C에서 지원되지 않으므로 모든 형식 변수를 형식 상수 `int`로 고정했다.

2. 2. 익명 함수와 중첩 함수

익명 함수를 지원하는 언어에서는 익명 함수를 고차 함수의 인자로 전달할 수 있다. 예를 들어 하스켈에서는 다음과 같이 익명 함수를 `map` 함수의 인자로 전달할 수 있다.

```haskell

main = map (\x -> 3 * x + 1) [1, 2, 3, 4, 5]

```

반면, C와 같이 익명 함수를 지원하지 않는 언어에서는 함수에 이름을 붙여 정의해야 한다.

```c

int f(int x) {

return 3 * x + 1;

}

int main() {

int list[] = {1, 2, 3, 4, 5};

map(f, list, 5);

}

```

C++, D, Erlang, Scheme, Lisp, JavaScript, Perl, Python, C#, Ruby, Scala, PHP 등 다양한 언어들이 익명 함수 또는 람다식을 지원하며, 이를 통해 함수를 값으로 취급하고 다른 함수의 인자로 전달하는 등의 유연한 프로그래밍이 가능하다.

2. 3. 비지역 변수와 클로저

익명 함수나 중첩 함수가 생기면, 함수 본체 외부의 변수(이른바 ''비지역 변수'')를 참조하는 것이 자연스러워진다.[6]

```haskell

main = let a = 3

b = 1

in map (\x -> a * x + b) [1, 2, 3, 4, 5]

```

함수가 순수한 함수 포인터로 표현된다면, 함수 본체 외부에 있는 값이 어떻게 전달되어야 하는지 더 이상 알 수 없으므로, 수동으로 클로저를 구성해야 한다.[6] 따라서 여기서는 "일급" 함수에 대해 말할 수 없다.[6]

```c

typedef struct {

int (*f)(int, int, int);

int a;

int b;

} closure_t;

void map(closure_t *closure, int x[], size_t n) {

for (int i = 0; i < n; ++i)

x[i] = (closure->f)(closure->a, closure->b, x[i]);

}

int f(int a, int b, int x) {

return a * x + b;

}

void main() {

int l[] = {1, 2, 3, 4, 5};

int a = 3;

int b = 1;

closure_t closure = {f, a, b};

map(&closure, l, 5);

}

```

또한 `map`은 이제 환경 외부의 두 int를 참조하는 함수에 특화되어 있다.[6] 더 일반적으로 설정할 수 있지만, 더 많은 보일러플레이트 코드가 필요하다.[6] f가 중첩 함수였다면 동일한 문제에 직면했을 것이며, 이것이 C에서 지원되지 않는 이유이다.[6]

```perl

my $divisor = 10;

my $checker = sub {

my $val = shift;

if ($val % $divisor ) {

return 0;

} else {

return 1;

}

};

```

이것은 Perl에서의 일급 함수일 뿐만 아니라 클로저의 예이기도 하다.[6] 또한 주목해야 할 점은 객체 지향 Perl에서는 클래스에 대한 함수 레퍼런스를 `bless`하는 것이 가능하다는 것이다.[6]

2. 4. 고차 함수: 함수를 결과로 반환

함수를 반환할 때는 사실상 그 함수의 클로저를 반환하는 것이다. C와 같이 클로저에 의해 캡처된 지역 변수가 범위를 벗어나는 경우, 상향 펀아그 문제가 발생할 수 있다.[1] C 언어의 예시에서 클로저에 의해 캡처된 모든 지역 변수는 클로저를 생성하는 함수에서 반환되면 범위를 벗어나기 때문이다. 나중에 클로저를 강제로 실행하면 정의되지 않은 동작이 발생하여 스택이 손상될 수 있다.[1]

2. 5. 변수에 함수 할당

변수에 함수를 할당하고 (전역) 데이터 구조 안에 저장하는 것은 함수를 반환하는 것과 동일한 어려움을 겪을 수 있다.[1]

```haskell

f :: Integer -> Integer

f = let a = 3

b = 1

in [map (\x -> a * x + b), map (\x -> b * x + a)]

2. 6. 함수 동일성

대부분의 리터럴과 값에 대해 동일성을 검사할 수 있으므로, 프로그래밍 언어가 함수의 동일성 검사를 지원할 수 있는지 묻는 것은 자연스러운 일이다. 자세히 살펴보면 이 질문은 더 어려워 보이며 몇 가지 유형의 함수 동일성을 구별해야 한다.[7]

; 외연적 동일성: 두 함수 ''f''와 ''g''가 모든 입력에 대해 출력 값이 같으면 외연적으로 동일하다고 간주한다(∀''x''. ''f''(''x'') = ''g''(''x'') ). 이 동일성 정의에 따라, 예를 들어 삽입 정렬 및 병합 정렬과 같은 안정 정렬 알고리즘의 두 가지 구현은 동일하다고 간주된다. 외연적 동일성을 결정하는 것은 일반적으로 결정 불가능 문제이며, 유한한 도메인을 가진 함수조차도 종종 다루기 어렵다. 이러한 이유로 어떤 프로그래밍 언어도 함수 동일성을 외연적 동일성으로 구현하지 않는다.

; 내포적 동일성: 내포적 동일성에서 두 함수 ''f''와 ''g''는 동일한 "내부 구조"를 가지면 동일하다고 간주한다. 이러한 종류의 동일성은 인터프리터 언어에서 함수 본문의 소스 코드를 비교하거나(Interpreted Lisp 1.5와 같이) 컴파일 언어에서 오브젝트 코드를 비교하여 구현할 수 있다. 내포적 동일성은 외연적 동일성을 의미한다 (함수가 결정적이고 프로그램 카운터 또는 변경 가능한 전역 변수와 같은 숨겨진 입력이 없다고 가정한다).

; 참조 동일성: 외연적 및 내포적 동일성을 구현하는 것은 비실용적이므로 함수 동일성 검사를 지원하는 대부분의 언어는 참조 동일성을 사용한다. 모든 함수 또는 클로저에는 고유한 식별자(일반적으로 함수 본체 또는 클로저의 주소)가 할당되며 동일성은 식별자의 동일성을 기반으로 결정된다. 별도로 정의되었지만 다른 면에서 동일한 두 함수 정의는 동일하지 않은 것으로 간주된다. 참조 동일성은 내포적 및 외연적 동일성을 의미한다. 참조 동일성은 참조 투명성을 깨뜨리므로 순수 언어(예: Haskell)에서는 지원되지 않는다.

3. 타입 이론

타입 이론에서, 타입 ''A''의 값을 받아 타입 ''B''의 값을 반환하는 함수의 타입은 ''A'' → ''B'' 또는 ''B''''A''로 표기될 수 있다. 커리-하워드 대응에서, 함수형 타입은 논리적 함의와 관련 있으며, 람다 추상화는 가설적 가정을 해소하는 것과, 함수 적용은 전건 긍정 추론 규칙과 각각 대응된다. 일반적인 프로그래밍 함수 외에도, 타입 이론은 일급 함수를 사용하여 연관 배열 및 유사한 자료 구조를 모델링한다.

범주론적 프로그래밍 관점에서, 일급 함수의 사용 가능성은 닫힌 범주 가정을 따른다. 예를 들어, 단순 타입 람다 계산은 데카르트 닫힌 범주의 내부 언어에 해당한다.

4. 언어 지원

언어함수형스크립트명령형기타
일급 함수 지원 여부


  • '''함수형 언어''': 함수형 프로그래밍 언어는 일급 함수를 전면적으로 지원한다.
  • '''스크립트 언어''': 대부분의 스크립트 언어는 일급 함수를 지원한다.
  • '''명령형 언어''':
  • Algol 계열은 고차 함수를 지원하지만, 함수를 결과로 반환하는 데 제한이 있었다.
  • C 계열은 함수 포인터를 통해 함수를 인수로 전달하고 반환할 수 있지만, 중첩 함수는 지원하지 않아 일급 함수를 완전히 지원한다고 보기 어렵다.
  • 최신 명령형 언어(C# 2.0, C++, Java 등)는 가비지 수집을 지원하여 일급 함수 구현이 가능하다.
  • '''기타 언어''': Fortran, Maple, Mathematica 등도 일급 함수를 지원한다.


몇 가지 언어에 대한 추가 설명은 다음과 같다.

  • '''C++''': C++11부터 익명 함수클로저를 지원하며, 비지역 변수 캡처 방식에 따라 안전성 문제가 발생할 수 있다.
  • '''Java''': Java 8부터 클로저가 final 또는 "effectively final" 비지역 변수만 캡처할 수 있도록 지원한다.
  • '''Lisp''': 렉시컬 스코핑 Lisp 변형은 클로저를 지원하지만, 동적 스코핑 변형은 지원하지 않거나 특별한 구문이 필요하다.
  • '''Python''': `def` 문이나 `lambda` 식으로 함수를 생성할 수 있지만, `lambda` 식은 식으로 제한된다.
  • '''Ruby''': 메서드는 값으로 사용하거나 전달할 수 없으며, `Method` 또는 `Proc` 객체로 검색해야 한다.

5. 한국어 위키백과 추가 내용

Erlang, Scheme, ML, Haskell, F#, Scala와 같은 함수형 프로그래밍 언어는 모두 일급 함수를 가지고 있다. 최초의 함수형 언어 중 하나인 Lisp는 일급 함수의 모든 측면이 제대로 이해되지 않아 함수가 동적으로 스코핑되었다. 이후 Scheme과 Common Lisp은 렉시컬 스코핑된 일급 함수를 가지고 있다.

Perl, Python, PHP, Lua, Tcl/Tk, JavaScript, Io를 포함한 많은 스크립트 언어도 일급 함수를 가지고 있다.

명령형 프로그래밍 언어의 경우, Algol과 Pascal, 전통적인 C 계열 언어, 최신 가비지 수집 변형과 같은 후손들을 구별해야 한다. Algol 계열은 중첩 함수와 함수를 인수로 사용하는 고차 함수는 허용했지만, 결과를 함수로 반환하는 고차 함수는 허용하지 않았다(예외적으로 Algol 68은 허용). C 계열은 함수를 인수로 전달하고 결과를 반환하는 것을 모두 허용했지만, 중첩 함수를 지원하지 않았다. (gcc 컴파일러는 확장으로 허용)

현대 명령형 언어는 종종 가비지 수집을 지원하여 일급 함수의 구현을 가능하게 한다. 일급 함수는 C# 2.0, C, C++, Objective-C에 대한 Apple의 Blocks 확장을 포함하여 언어의 후기 개정판에서만 지원되기도 한다. C++11은 익명 함수와 클로저에 대한 지원을 추가했지만, 가비지 수집되지 않는 언어 특성 때문에 결과를 반환할 함수에서 비지역 변수에 특별한 주의가 필요하다.

언어고차 함수중첩 함수비지역 변수비고
인수결과명명됨익명 함수클로저부분 적용
Algol 계열ALGOL 60아니오아니오아래로아니오함수 타입을 가짐
ALGOL 68부분[8]아래로[9]아니오
파스칼아니오아니오아래로아니오
Ada아니오아니오아래로아니오
오베론비중첩만 가능아니오아래로아니오
Delphi2009부터2009부터아니오
C 계열CGNU C에서 예Clang(Blocks)에서 예Clang(Blocks)에서 예아니오함수 포인터를 가짐
C++C++11[10]C++11[11]C++11[11]C++11함수 포인터, 함수 객체를 가짐. std::bind를 사용하면 명시적인 부분 적용 가능
C#7부터2.0 / 3.02.03.0delegate(2.0) 및 람다식(3.0)을 가짐
Objective-C익명 사용2.0 + Blocks[12]2.0 + Blocks아니오함수 포인터를 가짐
Java익명 사용Java 8Java 8익명 내부 클래스를 가짐
Go익명 사용[13]
Limbo아니오
Newsqueak아니오
Rust[14]
함수형 언어Lisp구문구문Common Lisp아니오(아래 참조)
SchemeSRFI 26[15]
줄리아
Clojure
ML
Haskell
jq아니오식만 가능아래로아니오
Scala
Erlang
Elixir
F#
OCaml
스크립트 언어Io아니오
JavaScriptECMAScript 5[16]
Lua[17]
PHP익명 사용5.35.3아니오사용자 정의 코드로 부분 적용 가능
Perl66[18]
Python식만 가능2.5[19](아래 참조)
Ruby구문구문스코프 없음1.9(아래 참조)
기타 언어Fortran아니오아니오아니오
Maple아니오
Mathematica아니오
MATLAB[20]새로운 함수 자동 생성을 통해 부분 적용 가능[21]
Smalltalk부분라이브러리를 통해 부분 적용 가능
Swift


  • C++: C++11 클로저는 복사 생성, 참조(수명 연장 없이), 이동 생성을 통해 비지역 변수를 캡처할 수 있다.
  • Java: Java 8 클로저는 final 또는 "effectively final" 비지역 변수만 캡처할 수 있다. Java의 함수 타입은 클래스로 표현된다.
  • Lisp: 렉시컬 스코핑 Lisp 변형은 클로저를 지원한다. 동적 스코핑 변형은 클로저를 지원하지 않거나 클로저를 생성하기 위한 특별한 구문이 필요하다.[22]
  • Python: 버전 2.5부터 `functools.partial`[19]를 사용하여 명시적인 부분 적용
  • Ruby: Ruby의 정규 "함수"(실제로는 메서드)의 식별자는 값으로 사용하거나 전달할 수 없다.

5. 1. 대한민국에서의 활용

대한민국에서는 웹 개발, 데이터 과학, 인공지능 등 다양한 분야에서 일급 함수 개념을 활발하게 활용하고 있다.
웹 개발:React, Vue.js, Angular와 같은 최신 JavaScript 프레임워크는 고차 함수를 활용하여 컴포넌트 기반 개발을 지원한다. 특히 React에서는 고차 컴포넌트(HOC, Higher-Order Component) 및 훅(Hook)과 같은 패턴이 등장하면서 함수형 프로그래밍 방식이 더욱 중요해졌다. 이러한 방식은 코드 재사용성을 높이고, 유지보수를 용이하게 하며, 테스트하기 쉬운 코드를 작성하는 데 기여한다.
데이터 과학:Python의 Pandas, NumPy와 같은 라이브러리는 데이터 분석 및 처리에 유용한 고차 함수를 제공한다. 예를 들어, `map`, `filter`, `reduce`와 같은 함수를 사용하여 데이터를 변환하고, 필터링하며, 집계하는 작업을 간결하게 수행할 수 있다. 이러한 함수들은 데이터 과학자들이 복잡한 데이터 처리 파이프라인을 효율적으로 구축하는 데 도움을 준다.
인공지능:TensorFlow, PyTorch와 같은 딥러닝 프레임워크에서도 함수형 프로그래밍 방식을 활용하여 인공지능 모델을 개발한다. 예를 들어, 모델의 각 레이어를 함수로 정의하고, 이 함수들을 합성하여 전체 모델을 구성하는 방식이 일반적이다. 이러한 방식은 모델의 구조를 명확하게 표현하고, 모델의 각 부분을 쉽게 수정하고 재사용할 수 있게 해 준다.

5. 2. 일급 함수와 관련된 한국의 개발 문화

대한민국에서는 함수형 프로그래밍 언어뿐만 아니라 스크립트 언어를 포함한 다양한 프로그래밍 언어에서 일급 함수 개념이 널리 활용되고 있다. 특히 JavaScript, Python, C# 등에서 일급 함수를 지원하면서 개발자들 사이에서 함수형 프로그래밍에 대한 관심이 높아졌다.

Java는 Java 8부터 익명 함수클로저를 지원하여 일급 함수를 사용할 수 있게 되었다.[13] C++C++11 표준부터 익명 함수와 클로저를 지원하며, 비지역 변수 캡처 방식에 따라 주의가 필요하다.[10][11]

이러한 언어적 지원을 바탕으로, 대한민국 개발 문화에서도 일급 함수를 활용한 다양한 개발 방식이 나타나고 있다. 예를 들어, 웹 프론트엔드 개발에서는 JavaScript의 일급 함수 특성을 활용하여 콜백 함수, 이벤트 처리, 비동기 프로그래밍 등을 구현한다. 또한, Python의 `functools.partial`[19] 이나 JavaScript의 사용자 정의 부분 적용 코드를[16] 통해 함수의 재사용성을 높이는 기법도 널리 사용된다.

5. 3. 남북한 프로그래밍 용어 비교

북한에서 '일급 함수'와 관련된 용어를 남한과는 다르게 사용할 수 있다는 점은 프로그래밍 개념 이해에 혼란을 줄 수 있다. 남북한 프로그래밍 용어 차이는 단순한 용어 선택 문제를 넘어, 개념 이해 및 실제 프로그래밍 방식에도 영향을 줄 수 있다.

주어진 자료에서는 특정 프로그래밍 언어에서 일급 함수 관련 기능(고차 함수, 중첩 함수, 비지역 변수, 부분 적용 등) 지원 여부를 표로 제공하지만, 남북한 용어 비교에 대한 직접적인 언급은 없다. 따라서 이 표를 바탕으로 남북한 용어 차이를 추론하거나 분석하기는 어렵다.

하지만, 원본 소스에 언급된 C++, Python, JavaScript, Haskell 등 다양한 프로그래밍 언어는 일급 함수 개념을 지원하며, 남북한 모두에서 사용될 가능성이 있다. 따라서 이러한 언어에서 일급 함수 관련 기능을 어떻게 사용하는지 비교하고 분석하여, 남북한 프로그래밍 용어 차이와 그 영향을 간접적으로 유추해 볼 수 있다.

참조

[1] 서적 Structure and Interpretation of Computer Programs https://mitpress.mit[...] MIT Press 2021-09-27
[2] 서적 Programming language pragmatics unknown
[3] 저널 The Implementation of Lua 5.0 2005
[4] 저널 Understanding Programming Languages http://www.cs.cmu.ed[...] 2000
[5] 문서 The Function of FUNCTION in LISP, or Why the FUNARG Problem Should be Called the Environment Problem https://dspace.mit.e[...] MIT AI Memo 199 1970
[6] 웹사이트 GNU Compiler Collection: Nested Functions https://gcc.gnu.org/[...]
[7] 문서 Intensional Equality ;=) for Continuations http://www.cs.prince[...] 1995
[8] 저널 A comparison of PASCAL and Algol 68 https://research.vu.[...]
[9] 웹사이트 The History of Python: Origins of Python's "Functional" Features http://python-histor[...] 2009-04-21
[10] 웹사이트 Nested functions using lambdas/closures https://stackoverflo[...]
[11] 문서 Lambda expressions and closures for C++ http://www.open-std.[...] 2006-02-26
[12] 웹사이트 Mac Dev Center: Blocks Programming Topics: Introduction https://developer.ap[...]
[13] 웹사이트 2 examples in Go that you can have partial application https://play.golang.[...]
[14] 웹사이트 partial_application https://docs.rs/part[...] 2020-11-03
[15] 웹사이트 SRFI 26: Notation for Specializing Parameters without Currying http://srfi.schemers[...]
[16] 웹사이트 John Resig - Partial Application in JavaScript http://ejohn.org/blo[...]
[17] 웹사이트 Lua Code for Curry (Currying Functions) http://tinylittlelif[...] 2010-07-23
[18] 웹사이트 Blog | Perlgeek.de :: Currying http://perlgeek.de/b[...]
[19] 웹사이트 What's New in Python 2.5 — Python 3.10.0 documentation https://docs.python.[...]
[20] 웹사이트 Anonymous Functions - MATLAB & Simulink - MathWorks United Kingdom http://www.mathworks[...]
[21] 웹사이트 Partial Function Evaluation in MATLAB https://stackoverflo[...]
[22] 웹사이트 Closures in ZetaLisp https://common-lisp.[...] 2012-03-19
[23] 서적 Programming language pragmatics unknown
[24] 서적 Structure and Interpretation of Computer Programs https://mitpress.mit[...] MIT Press 2024-04-13
[25] 서적 Programming language pragmatics unknown
[26] 저널 The Implementation of Lua 5.0 2005
[27] 저널 Understanding Programming Languages http://www.cs.cmu.ed[...] 2000
[28] 문서 The Function of FUNCTION in LISP, or Why the FUNARG Problem Should be Called the Environment Problem https://dspace.mit.e[...] MIT AI Memo 199 1970



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com